////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//                                                                                                                            //
//                                                         WNProject                                                          //
//                                                                                                                            //
//            This file is distributed under the BSD 2-Clause open source license. See License.txt for details.               //
//                                                                                                                            //
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

#ifndef __WN_FUNCTIONS_H__
#define __WN_FUNCTIONS_H__

#include "WNCore/inc/WNBase.h"
#include "WNCore/inc/WNDefines.h"

__WN_INLINE WN_BOOL WNIsMultipleOfTwo(WN_UINT64 _x);
__WN_INLINE WN_BOOL WNIsPowerOfTwo(WN_UINT64 _x);

__WN_INLINE WN_VOID WNPauseConsole();

#ifdef _WN_CPLUSPLUS
    template <typename T>
    __WN_INLINE WN_BOOL WNIsValid(T _value);

    template <WN_VOID*>
    __WN_INLINE WN_BOOL WNIsValid(WN_VOID* _value);

    template <WN_CHAR*>
    __WN_INLINE WN_BOOL WNIsValid(WN_CHAR* _value);

    template <WN_UINT32>
    __WN_INLINE WN_BOOL WNIsValid(WN_UINT8 _value);

    template <WN_UINT16>
    __WN_INLINE WN_BOOL WNIsValid(WN_UINT16 _value);

    template <WN_UINT32>
    __WN_INLINE WN_BOOL WNIsValid(WN_UINT32 _value);

    template <WN_UINT64>
    __WN_INLINE WN_BOOL WNIsValid(WN_UINT64 _value);
#endif

#include "WNCore/inc/WNFunctions.inl"

#endif // __WN_FUNCTIONS_H__